//
//  Matrix.h
//  IsoCplus
//
//  Created by 周张林 on 15/9/15.
//
//

#ifndef __IsoCplus__Matrix__
#define __IsoCplus__Matrix__

#include "cocos2d.h"

class Matrix
{
    
public:
        
    float a=1,b=0,c=0,d=1,tx=0,ty=0;
    
    //旋转
    Matrix& rotate(float angle);
    
    //缩放
    Matrix& scale(float x,float y);
    
    //移动
    Matrix& translate(float tx,float ty);
    
    /**
     *  归一
     *
     *  @return 自身
     */
    Matrix& identity();
    
    /**
     *  转换点
     *
     *  @param pt cocos2d::Vec2&
     *
     *  @return 新的cocos2d::Vec2
     */
    cocos2d::Vec2 transformPoint(const cocos2d::Vec2 &pt);
    
    /**
     *  反转点
     *
     *  @param pt cocos2d::Vec2&
     *
     *  @return 新的cocos2d::Vec2
     */
    cocos2d::Vec2 deltaTransformPoint(const cocos2d::Vec2 &pt);
    
    /**
     *  创建一个box
     *
     *  @param scaleX 缩放x
     *  @param scaleY 缩放y
     *  @param rotation 旋转
     *  @param tx 位移x
     *  @param ty 位移y
     *
     *  @return 自身
     */
    Matrix& createBox(float scaleX, float scaleY, float rotation, float tx, float ty);
    
    Matrix& createGradientBox(float width,float height,float rotation,float tx,float ty);
    
    /**
     *  反转矩阵
     *
     *  @return 自身引用
     */
    Matrix& invert();
    
    /**
     *  叠加矩阵
     *
     *  @param m 另一个矩阵
     *
     *  @return 自身
     */
    Matrix& concat(const Matrix &m);
};

#endif /* defined(__IsoCplus__Matrix__) */
